package com.tianxiang.service;

import java.io.File;
import java.text.ParseException;
import java.util.ArrayList;

import com.tianxiang.dao.MyFileDao;
import com.tianxiang.model.MyFile;
import com.tianxiang.model.Owner;
import com.tianxiang.utils.Tools;

public class ListFileService {
	String currentFile; // 当前文件或文件夹
	int fileNum; // 当前文件夹下的文件个数
	int folderNum; // 当前文件夹下的文件夹个数
	// String totalSize; //当前文件夹下文件大小总和
	ArrayList<MyFile> childFilesList;// 当前目录下的子文件夹和子文件
/**
 * 返回用户根目录下的文件夹目录
 * @return
 */
	public String getCurrentFile() {
		
		return currentFile.substring(Tools.root.length(),currentFile.length());
	}

	public void setCurrentFile(String currentFile) {
		this.currentFile = currentFile;
	}
/**
 * 返回指定文件夹下的所有文件夹和文件列表
 * @return
 * @throws ParseException 
 */
	public ArrayList<MyFile> getChildFilesList(String username) throws ParseException {
		childFilesList=new ArrayList<MyFile>();
		File parFile = new File(currentFile);
		File childsFiles[] = parFile.listFiles();
		MyFile myFile;
		for(int i=0;i<childsFiles.length;i++){  
			if (!childsFiles[i].isFile()) {  //判断文件是否有文件夹,保存文件夹类文件
				myFile = new MyFile();
				myFile.setLastModitied(Tools.fileLastModifyTime(childsFiles[i].lastModified()));
				myFile.setName(childsFiles[i].getName());
				myFile.setPath(childsFiles[i].getAbsolutePath());
				myFile.setFileSize("-");
				myFile.setFile(false); // 设置文件类型，false表示文件夹
				myFile.setFileType(Tools.FOLDERTYPE); // 设置文件属性，设为文件夹
				childFilesList.add(myFile);
			}
		}
		
		ArrayList<MyFile> myFiles=new ArrayList<MyFile>();
		MyFileDao myFileDao=new MyFileDao();
		Owner o;
		MyFile mf;
		ArrayList<Owner> lists=myFileDao.findUserFile(username);
		int fid;
		for(int i=0;i<lists.size();i++){
			myFile=new MyFile();
			o=lists.get(i);
			fid=lists.get(i).getFileId();
			mf=myFileDao.findFileById(fid);
			if(o.getOuserPath().substring(0, o.getOuserPath().lastIndexOf("\\")).equals(parFile.getAbsolutePath())){
			if(o.getIsAlive()==0){  // 判断文件是否已删除
//			if(!Tools.isFileInFolder(o.getOuserPath(), o.getUsername())){  //判断文件是否有文件夹,保存非文件夹类文件
				myFile.setName(o.getOfileName());
				myFile.setFileType(mf.getFileType());
				myFile.setFileSize(Tools.dealFileSize(Long.parseLong(mf.getFileSize())));
				myFile.setLastModitied(o.getLastModify());
				myFile.setPath(o.getOuserPath());
				myFile.setFile(true);
				myFiles.add(myFile);
				childFilesList.add(myFile);
				}
			}
		}
		return childFilesList;
	}
	
	//添加虚拟文件
	public ArrayList<MyFile> addVirtualFile(ArrayList<MyFile> list,MyFile myFile) throws ParseException {
		
		MyFileDao myFileDao =new MyFileDao();
		
		return list;
		
	}
	
	public ArrayList<MyFile>listDisk(String absPath) throws ParseException{
		System.out.println("service listDisk……");
		ArrayList<MyFile> listFiles=new ArrayList<MyFile>();
		File parFile = new File(absPath);
		File childsFiles[] = parFile.listFiles();
		System.out.println(absPath+"下共有文件"+childsFiles.length);
		
		for (File file : childsFiles) {
			MyFile myFile = new MyFile();
		myFile.setPath(file.getAbsolutePath());
		if (file.isFile()) {
			myFile.setFile(true);
			myFile.setFileSize(Tools.dealFileSize(file.length()));
			myFile.setFileType(Tools.getFileType(file.getName()));
		}else {
			myFile.setFile(false);
			myFile.setFileSize("-");
			myFile.setFileType(Tools.FOLDERTYPE);
		}
		
			myFile.setLastModitied(Tools.fileLastModifyTime(file.lastModified()));
			myFile.setName(file.getName());
			listFiles.add(myFile);
		}
		return listFiles;
	}
	public ArrayList<MyFile> listUserFiles(String username){
		ArrayList<MyFile> myFiles=new ArrayList<MyFile>();
		MyFileDao myFileDao=new MyFileDao();
		MyFile myFile;
		Owner o;
		MyFile mf;
		ArrayList<Owner> lists=myFileDao.findUserFile(username);
		int fid;
		for(int i=0;i<lists.size();i++){
			myFile=new MyFile();
			o=lists.get(i);
			fid=lists.get(i).getFileId();
			mf=myFileDao.findFileById(fid);
			myFile.setName(o.getOfileName());
			myFile.setFileType(mf.getFileType());
			myFile.setFileSize(Tools.dealFileSize(Long.parseLong(mf.getFileSize())));
			myFile.setLastModitied(o.getLastModify());
			myFile.setPath(o.getOuserPath());
			myFile.setFile(true);
			myFiles.add(myFile);
		}
		return myFiles;
	}

	public static void main(String[] args) {
		ListFileService service = new ListFileService();
		service.setCurrentFile("d:\\");
		service.outFilseInfo(service.childFilesList);

	}

	/**
	 * 输出当前文件夹下的所有文件及其信息
	 * 
	 * @param childfiles2
	 */
	private void outFilseInfo(ArrayList<MyFile> fileList) {
		System.out
				.println("name\tpath\tlastModitied\tisFile\tfileType\tfileSize");
		for (MyFile file : fileList) {
			System.out.print(file.getName() + "\t");
			System.out.print(file.getPath() + "\t");
			System.out.print(file.getLastModitied() + "\t");

			System.out.print(file.isFile() + "\t");
			System.out.print(file.getFileType() + "\t");
			System.out.println(file.getFileSize());

		}

	}

}
